// 使用相对路径导入
import { apiRequest } from '../utils/apiRequest.js';
const { get, post, put, del } = apiRequest;

// 处理包含循环引用的响应数据
function processResponse(response) {
  // 处理顶层$values
  if (response && response.$values) {
    // 先创建一个映射表，用于解析$ref引用
    const refMap = new Map();
    
    // 第一次遍历：收集所有带$id的对象
    response.$values.forEach(item => {
      if (item && item.$id) {
        refMap.set(item.$id, item);
      }
      // 递归收集嵌套对象的$id
      collectRefs(item);
    });
    
    function collectRefs(item) {
      if (!item || typeof item !== 'object') return;
      
      if (item.$id) {
        refMap.set(item.$id, item);
      }
      
      // 处理children属性
      if (item.children && item.children.$values) {
        item.children.$values.forEach(child => collectRefs(child));
      }
      
      // 处理parent属性
      if (item.parent) {
        collectRefs(item.parent);
      }
    }
    
    // 第二次遍历：解析$ref引用
    function resolveRefs(item) {
      if (!item || typeof item !== 'object') return item;
      
      // 如果是$ref引用
      if (item.$ref) {
        return refMap.get(item.$ref) || item;
      }
      
      // 处理children属性
      if (item.children && item.children.$values) {
        item.children = item.children.$values.map(child => resolveRefs(child));
      } else if (item.children && Array.isArray(item.children)) {
        item.children = item.children.map(child => resolveRefs(child));
      }
      
      // 处理parent属性
      if (item.parent && typeof item.parent === 'object') {
        item.parent = resolveRefs(item.parent);
      }
      
      // 移除$id属性，避免前端处理困惑
      delete item.$id;
      
      return item;
    }
    
    // 处理所有顶层项目
    const processedItems = response.$values
      .map(item => resolveRefs(item))
      .filter(item => item !== undefined); // 过滤undefined值
    
    return processedItems;
  }
  
  return response;
}

// 一级分类API
const firstLevelCategoryApi = {
  // 获取所有一级分类
  getAll: () => get('/api/FirstLevelCategories')
    .then(response => processResponse(response)),

  // 获取单个一级分类
  getById: (id) => get(`/api/FirstLevelCategories/${id}`),

  // 添加一级分类
  add: (category) => {
    // 移除前端生成的id，由后端生成
    const { id, ...categoryWithoutId } = category;
    return post('/api/FirstLevelCategories', categoryWithoutId);
  },

  // 更新一级分类
  update: (id, category) => put(`/api/FirstLevelCategories/${id}`, category),

  // 删除一级分类
  delete: (id) => del(`/api/FirstLevelCategories/${id}`)
};

// 二级分类API
const secondLevelCategoryApi = {
  // 获取所有二级分类
  getAll: () => get('/api/SecondLevelCategories')
    .then(response => processResponse(response)),

  // 获取单个二级分类
  getById: (id) => get(`/api/SecondLevelCategories/${id}`),

  // 根据一级分类ID获取二级分类
  getByFirstLevelCategoryId: (firstLevelCategoryId) => get(`/api/SecondLevelCategories/ByFirstLevelCategory/${firstLevelCategoryId}`)
    .then(response => processResponse(response)),

  // 添加二级分类
  add: (category) => {
    // 移除前端生成的id，由后端生成
    const { id, ...categoryWithoutId } = category;
    return post('/api/SecondLevelCategories', categoryWithoutId);
  },

  // 更新二级分类
  update: (id, category) => put(`/api/SecondLevelCategories/${id}`, category),

  // 删除二级分类
  delete: (id) => del(`/api/SecondLevelCategories/${id}`)
};

// 组合API导出
const materialCategoryApi = {
  firstLevel: firstLevelCategoryApi,
  secondLevel: secondLevelCategoryApi
};

export default materialCategoryApi;